Chapter 02 · StoryCam Development Narrative

文档基线、架构决策与实现计划

本 session 把 StoryCam 从一份较粗的产品设计,推进为可执行的中文产品规格、工程文档体系和 Phase 0/Phase 1 开发计划。

日期:2026-04-26 至 2026-04-27 整理日:2026-05-15 类型:产品规格 / 架构规划 / 文档治理

本 Session 摘要

  • 用户指出 gstack 产出的 StoryCam 产品设计不够详细,要求使用 spec-driven development 方式迭代,并明确需要中文版本。
  • 本次讨论补齐了 MVP 的关键产品约束:故事世界确认、1-3 个核心分镜组、扩展分镜、Seedance 2.0 clip、真实合成 final work、账号内保存和预览。
  • 工程基线从“前端原型”扩展为完整 Web 产品架构:Next.js、Supabase Auth/Postgres/Storage、Vercel AI SDK、OpenRouter、Seedance 2.0。
  • 借鉴 OpenAI Harness Engineering 的思想,项目文档被整理为短入口、索引化 docs、active exec plans、generated contracts、references 的结构。
  • 用户要求先完成文档型任务,不急着写代码;因此先完成 Task 2 开发者契约文档,再完成 Task 1 工程文档基线校准。
  • 会话末尾确认下一步将进入代码实现,第一项是 Task 3:Scaffold Web app;但用户随后提醒 AGENTS.mdARCHITECTURE.md 还需要继续动态对齐。

时间线

01
用户原话

docs/product/storycam-film-machine-design.md 这个是 gstack 出的产品设计文档,但是我觉得不详细,你可以使用 $spec-driven-development 来迭代。需要中文版本的。”

Codex 总结

采用规格先行的方式处理:先不进入代码,而是把 StoryCam 的产品目标、用户路径、生成阶段、确认节点和产物结构写成更可执行的中文规格。

结果 / 影响:本 session 的主线被确定为“先把产品和工程语义讲清楚”,避免直接从粗略设计跳到实现。
02
用户原话

“剧本 + 人物资产 + 场景资产、分镜脚本 + 1-3 个核心分镜组、拓展分镜,这些具体的实现方法,或者调用哪些 ai 模型没有写,是在这步写还是到 plan 里写?”

Codex 总结

把“产品规格”和“实现计划”的边界拆开:规格里定义用户可理解的产物、阶段和体验结果;计划里补具体技术框架、provider contract、模型调用方式、失败路径和验证命令。

结果 / 影响:形成一个重要原则:模型选择和调用协议要进入工程计划和 provider contract,而不是散落在产品文案里。
03
用户补充决策

“核心分镜组的数量,应该由计划生成的视频长度来自动判断生成一组、两组还是三组。”

“Phase 1 允许用户上传照片。”

“故事世界确认默认更像短剧本。”

“第一版真实视频生成成功后不支持分享,只支持本地保存和预览。”

“真实合成 final video。”

“由最强核心分镜图承担封面。”

“如果 Seedance 2.0 输出质量不稳定,第一版救援路径优先是重拍。”

“不允许导出 Shanyin-style shot data,Shanyin-style 都是后台设计,用户需要知道核心方案。”

Codex 总结

把这些回答固化为 MVP 决策:核心分镜组数由时长自动判断,扩展分镜默认服务于父分镜组,不单独触发视频生成;final work 必须是真实合成视频;Shanyin 方法只作为内部导演脑,不暴露专业表格给普通用户。

结果 / 影响:StoryCam 的边界从“AI 视频生成工具”收束为“普通用户的私人故事剧场”,并明确第一版不做公开分享和工业化镜头数据导出。
04
用户原话

“使用 $planning-and-task-breakdown,在 docs/engineering 基础上进行详细的规划。旧的计划可以迭代,不要完全保留。”

Codex 总结

用任务拆解方式重写 active implementation plan:按依赖顺序组织 Phase 0 工程契约、Web scaffold、env 校验、Auth、artifact schema、Supabase、provider、job、UI 和 QA。旧计划不被机械保留,而是被迁移、修正和吸收。

结果 / 影响:实现路线从“文档想法”变成可执行任务序列,每个任务都有 acceptance criteria 和 verification。
05
用户原话

“我看没有后端服务和数据库的一些设计?”

Codex 总结

识别到原计划偏前端和产品流,缺少后端服务、数据模型、作业生命周期和权限边界。后续计划因此补入 API contract、repository layer、RLS、Storage bucket、job lifecycle、privacy logging 等内容。

结果 / 影响:StoryCam 被提升为完整 Web app,而不是只靠前端状态和临时文件串起来的 demo。
06
用户原话

“数据库建议直接使用 supabase,然后后端的 ai 服务用 vercel ai sdk,具体一些生文和生图的模型用 openrouter 里的模型,你是不是还有考虑图片和视频在云端的存储。还是要有账号登录(首选 google 登录),使用 supabase 里的就行。”

Codex 总结

采纳这组技术决策:Supabase Auth 负责 Google 登录,Supabase Postgres 负责元数据和 RLS,Supabase Storage 负责上传图片、生成 clip、final work 和封面;Vercel AI SDK 编排文本、多模态、图像 provider,OpenRouter 作为模型入口,Seedance 2.0 通过视频 provider adapter 接入。

结果 / 影响:后端和存储边界明确,MVP 不再依赖本地保存或 SQLite fallback;用户资产与生成媒体默认是账号隔离和私有存储。
07
用户原话

“借鉴这篇 blog 里的核心思想调整下 agents、docs 等结构,便于后续的开发。”

用户给出目标结构:AGENTS.mdARCHITECTURE.mddocs/design-docsdocs/exec-plansdocs/generateddocs/product-specsdocs/references 以及 DESIGN.mdFRONTEND.mdSECURITY.md 等顶层指南。

Codex 总结

参考用户提供的 OpenAI Harness Engineering 文章,把仓库文档重组为“短入口 + 索引 + active plans + generated contracts + references”。核心思想是让 repo 自己成为长期记忆,而不是依赖一次性聊天上下文。

结果 / 影响:文档结构被重新组织,后续 agent 可以从 docs/README.mdAGENTS.mdARCHITECTURE.md 快速进入正确上下文。
08
用户原话

“先做文档型的吧 Task 2,文档型的都做完再碰代码。”

Codex 总结

优先完成 Task 2:补齐开发者契约文档。产出包括 API contract、provider contract、job lifecycle、privacy logging、local dev 说明,并把 mock/real mode、env vars、route contract、隐私日志规则写清楚。

结果 / 影响:实现前的“契约层”成型,后续代码可以按文档验证,而不是边写边猜 provider 和后端边界。
09
用户原话

“那做 task1。”

Codex 总结

完成 Task 1:同步工程文档基线。重点检查并标记了“不支持分享链接”“final work 必须真实合成”“测试关键路径从 save/share 改为 account save/preview”。

结果 / 影响:旧的分享链路和“单 clip 可直接当 final work”的含混说法被清理。剩余分享相关文本只保留在“不支持 / 未来需另开范围 / 测试不应出现”的上下文中。
10
用户原话

“那下一步是要进行代码实现了么?”

Codex 总结

确认文档型 Task 1、Task 2 已完成,下一步进入 Task 3:Scaffold Web app。计划从 Next.js App Router、TypeScript、Tailwind、基础脚本和 StoryCam Phase 1 shell 开始。

结果 / 影响:项目从规划阶段切到实现准备阶段,但还没真正开始写应用代码。
11
用户原话

“现在改了不少 docs,但是我看 AGENTS.mdARCHITECTURE.md 没有动态的调整。”

Codex 总结

开始读取 AGENTS.mdARCHITECTURE.mddocs/README.md 和 generated contracts,准备把这两个顶层入口继续对齐到最新 docs 结构与 Phase 0 决策。但该轮被用户中断,没有产生最终修改。

结果 / 影响:这是一个明确的后续待办:在进入代码实现前,顶层 agent map 和 architecture snapshot 仍需要再动态校准一次。

关键时刻

需求澄清

产品产物必须先成形,再生成视频

当时的问题:原设计没有清楚写出剧本、人物资产、场景资产、分镜脚本和核心分镜组如何实现。

为什么重要:如果直接生成视频,StoryCam 会变成普通 prompt-to-video 工具,用户感受不到私人故事世界被逐步搭建。

最终处理:确认 MVP 必须保留“故事世界确认”阶段,再进入核心分镜组和 Seedance clip 生成。

架构决策

Supabase 成为账号、数据和媒体基座

当时的问题:计划缺少后端服务、数据库、云端媒体存储和账号体系。

为什么重要:用户会上传照片和生成私人视频,必须有用户隔离、RLS、私有 bucket、短期预览 URL 和删除链路。

最终处理:确定 Supabase Auth + Postgres + Storage;Google 登录优先,第一版只做账号内保存和预览。

Provider 边界

Vercel AI SDK + OpenRouter + Seedance 分层

当时的问题:生文、生图、生视频的模型和调用方式没有写。

为什么重要:模型调用如果直接散在 UI 或 route 中,会让测试、替换、成本控制和隐私脱敏都变困难。

最终处理:文本、多模态、图像走 Vercel AI SDK 和 OpenRouter provider adapter;视频走独立 Seedance 2.0 adapter;mock mode 默认可跑通。

产品边界

第一版不做分享,final work 必须真实合成

当时的问题:旧文档里存在分享链路和“单 clip 也可以是 final work”的歧义。

为什么重要:分享会引入权限、撤销、安全和产品范围膨胀;final work 如果只是文案或 clip 引用,会削弱作品完成感。

最终处理:Task 1 验收明确:不生成分享链接;即使只有一个 clip,也要生成新的 final work 文件并写入 Supabase Storage。

协作方式

先完成文档型任务,再进入代码

当时的问题:文档结构和工程契约还在变动,直接写代码会放大返工。

为什么重要:StoryCam 同时涉及产品体验、AI provider、存储、安全和异步 job,先定契约能降低实现混乱。

最终处理:用户明确要求先做 Task 2 和 Task 1;代码实现被推迟到文档基线稳定之后。

工程证据

文件与结构变更

  • 新增 / 重写入口:AGENTS.mdARCHITECTURE.mddocs/README.md
  • 产品文档迁移到:docs/product-specs/
  • 设计文档迁移到:docs/design-docs/
  • 执行计划迁移到:docs/exec-plans/active/
  • 生成契约文档新增:docs/generated/api-contract.mdprovider-contract.mdjob-lifecycle.mdprivacy-logging.mddb-schema.md
  • 参考资料新增 / 迁移:docs/references/openai-harness-engineering.mddocs/references/local-dev.md、Shanyin director reference。

验证命令

  • rg -n "STORYCAM_GENERATION_MODE|GenerationJob|redaction|/api/story-world|/api/final-work" docs:用于验证 Task 2 契约覆盖。
  • rg -n "私密分享|分享链接|share|一个 clip 也可以是 final work" docs:用于验证 Task 1 没有残留旧产品承诺。
  • git diff --check -- AGENTS.md ARCHITECTURE.md docs:用于检查文档 diff 是否存在尾随空白等问题。

状态记录

  • 完成Task 1:同步工程文档基线。
  • 完成Task 2:补齐开发者契约文档。
  • 未产生本 session 未记录 PR、commit、CI、release 或 deploy 结果。
  • 未确认AGENTS.mdARCHITECTURE.md 的二次动态调整在用户中断前尚未完成。

架构基线

  • Frontend:Next.js App Router + TypeScript + Tailwind。
  • Auth:Supabase Auth,Google 登录优先。
  • Database:Supabase Postgres + RLS。
  • Media:Supabase Storage private buckets。
  • AI:Vercel AI SDK + OpenRouter provider adapters。
  • Video:Seedance 2.0 behind VideoGenerationProvider
  • Final work:真实合成视频文件,账号内预览和保存。

对外讲解用总结

这一章可以理解为 StoryCam 从“一个有吸引力但还比较松散的 AI 视频产品设想”,走向“可被工程团队持续开发的项目系统”的过程。我们没有急着写前端页面,而是先把用户体验里的每个关键产物讲清楚:用户输入私人想法和照片,系统先生成短剧本式故事世界、人物和场景资产,用户确认后再生成 1-3 个核心分镜组,最后每组对应一个 Seedance 2.0 视频片段,并被真实合成为最终作品。

这一步对 StoryCam 很重要,因为它同时解决了产品边界和工程边界:第一版不做公开分享,不导出专业 Shanyin 镜头表,不把扩展分镜误当成独立视频调用;同时明确 Supabase、Vercel AI SDK、OpenRouter、Seedance 2.0、Storage、RLS、job lifecycle 和隐私日志的职责。它连接了前面的产品愿景,也为后面的 Task 3 Web app scaffold、Auth、数据库、provider adapter 和 UI 实现铺好了路。

后续事项

  • 已完成中文产品规格迭代:补齐故事世界、核心分镜组、扩展分镜、clip 和 final work 的 MVP 语义。
  • 已完成工程计划重组:active implementation plan 和 test plan 已对齐“不分享、账号内保存/预览、真实 final work”。
  • 已完成开发者契约文档:API、provider、job lifecycle、privacy logging、local dev 基线已形成。
  • 待确认AGENTS.mdARCHITECTURE.md 需要继续动态调整,确保它们反映最新 docs 结构和 Phase 0 决策。
  • 待确认final work 账号内预览具体使用 signed URL、authenticated proxy,还是两者都支持。
  • 后续开发进入 Task 3:Scaffold Web app,创建 Next.js App Router + TypeScript + Tailwind 项目骨架。
  • 后续开发继续 Task 4 / Task 4A:环境变量校验、mock/real mode、Supabase Auth 和 Google 登录。
  • 后续开发随后实现 artifact schemas、Supabase schema/RLS/Storage、provider adapters、job state machine 和端到端 StoryCam UI。

敏感信息处理:本章节没有包含 API key、token、secret、完整 DSN、cookie、签名 URL、用户私密素材或原始 provider payload。